package com.srtp.secureprotocol.cipherstream;

import java.io.InputStream;

/**
 * 抽象的加密文件处理类，提供流式构建器创建方法
 */
public abstract class CipherFile {

    /**
     * 创建新的流构建器实例
     *
     * @return 流构建器Builder对象
     */
    public static Builder newStreamBuilder() {
        return new Builder();
    }

    /**
     * 构建器类，采用Builder模式创建CipherFileStream对象
     */
    public static class Builder {

        private InputStream inputStream;  // 输入流对象
        private long length;              // 数据长度（单位：字节）

        // 私有构造器，强制使用newStreamBuilder()创建实例
        private Builder() {
        }

        /**
         * 设置输入流
         *
         * @param inputStream 待处理的输入流
         * @return 当前构建器实例（支持链式调用）
         */
        public Builder withStream(InputStream inputStream) {
            this.inputStream = inputStream;
            return this;
        }

        /**
         * 设置数据长度
         *
         * @param length 数据长度（必须大于0）
         * @return 当前构建器实例（支持链式调用）
         */
        public Builder withLength(long length) {
            this.length = length;
            return this;
        }

        /**
         * 构建CipherFileStream对象
         *
         * @return 配置完成的CipherFileStream实例
         * @throws IllegalArgumentException 如果输入流为空或长度未设置
         */
        public CipherFileStream build() {
            // 验证必要参数
            if (inputStream == null)
                throw new IllegalArgumentException("必须指定输入流!");
            if (length == 0)
                throw new IllegalArgumentException("未指定有效长度!");

            // 创建加密文件流实例
            return new CipherFileStream(inputStream, length);
        }
    }
}
